package admin.service;

import admin.bean.Express;
import exception.ReCodeException;

import java.util.List;
import java.util.Map;

public interface ExpressService {

    /**
     * 用于查询数据库中的全部快递（总数+新增），待取件快递（总数+新增）
     * @return  [{num:总数,newInto:新增},{num:总数,newInto:新增}]
     */
    public List<Map<String,Integer>> console();


    /**
     * 用于查询所有快递，并实现分页
     * @param limit 是否分页的标记，true表示分页，false表示查询所有快递
     * @param offset SQL语句的起始索引
     * @param pageNumber 每页查询的数量
     * @return  快递的集合
     */
    public List<Express> findAll(boolean limit, int offset, int pageNumber);


    /**
     * 根据快递单号查询快递信息
     * @param number 传入快递单号
     * @return 返回查询的快递对象
     */
    public Express findByNumber(String number);


    /**
     * 根据快递取件码，查询快递信息
     * @param code 传入取件码
     * @return 返回查询的快递对象
     */
    public Express findByCode(String code);


    /**
     * 根据快递收件人的手机号查询快速信息；一个收件人可以存在多个快递
     * @param userPhone 收件人的手机号码
     * @return 返回查询的快递集合对象
     */
    public List<Express> findByUserPhone(String userPhone);

    /**
     * 根据快递配送员的手机号查询快递信息；配送员会配送多个快递
     * @param sysPhone 快递配送员的手机号
     * @return 返回查询的快递集合对象
     */
    public List<Express> findBySysPhone(String sysPhone);

    /**
     * 录入新的快递信息
     * @param express 要录入的快递对象
     * @return 录入的结果，true表示录入成功，false表示录入失败
     */
    public boolean insert(Express express) throws ReCodeException;


    /**
     * 根据主键id修改快递信息
     * @param id 要修改的快递主键id
     * @param newExpress 需要修改的快递对象
     * @return 返回修改的结果，true表示修改成功，false表示修改失败
     */
    public boolean update(int id,Express newExpress) throws ReCodeException;


    /**
     * 更新快递在存储柜的状态，1表示取件完成
     * @param code 要修改的快递取件码
     * @return 返回状态更新的结果，true表示更新成功，false表示更新失败
     */
    public boolean updateStatus(String code);


    /**
     * 根据快递的主键id删除快递信息
     * @param id 要删除的快递主键id
     * @return 返回删除的结果，true表示删除成功，false表示删除失败
     */
    public boolean delete(int id);

}
